#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdint.h>
#include "common-libs/collections/list.h"
#include "common-libs/collections/queue.h"




//Variables Planificador

FILE* file;
char* buffer,modoApertura;
static char* PATH = "/home/utn_so/Desarrollo/fat32.disk";		//saque la funcion para abrir archivo (que era un fopen r+ y solamente usaba escribirUnSector)
																//y puse el PATH como global al PPD. (tambien agrege fopen a escribirUnSector, claro)
																//idealmente, cuando PPD sea un proceso, se tendria que incluir el path como argc en el main

struct DirFisica{
 	 uint32_t Cabeza;
 	 uint32_t Cilindro;
 	 uint32_t Posicion;
 } typedef DirFisica;

 struct NodoSector{
	 uint32_t DirLogicaSector;
	 DirFisica DirFisicaSector;
 	 char DATA_SECTOR[513];
  } typedef NodoSector;



uint32_t POSICION_ACTUAL;
t_list COLA_GRABADO;
t_list COLA_LECTURA;



unsigned char * leerSector(uint64_t dirLogica)
{
	uint64_t NRO_BYTE_LEER = dirLogica * 512;
	unsigned char * buffer = (unsigned char*) malloc(512);

	FILE* file = fopen(PATH,"r");
	fseek(file, NRO_BYTE_LEER, 0);
	fread(buffer,512,1,file);
	return buffer;
}

void escribirUnSector(uint64_t dirLogica,char* buffer)
{
	uint64_t NRO_BYTE_ESCRIBIR = dirLogica *512;

	FILE* file = fopen(PATH,"r+");
	fseek(file, NRO_BYTE_ESCRIBIR, 0);
	fwrite(buffer, 512, 1, file);
}


DirFisica * ConvertirDirLogicaAFisica(uint32_t DirLogica)
{
	uint32_t AUX_CILINDRO = (DirLogica \ CantidadSectoresCilindro); //CantidadCaras se saca de configuracion.
	uint32_t AUX_CABEZA = ((DirLogica % CantidadSectoresCilindro) \ CantidadSectoresPista);
	uint32_t AUX_POSICION = ((DirLogica % CantidadSectoresCilindro) % CantidadSectoresPista);

	DirFisica * AUX_DIRFISICA = malloc(sizeof(DirFisica));
	AUX_DIRFISICA -> Cabeza = AUX_CABEZA;
	AUX_DIRFISICA -> Cilindro = AUX_CILINDRO;
	AUX_DIRFISICA -> Posicion = AUX_POSICION;

	//REVISAR
	return AUX_DIRFISICA;

}



void AlgoritmoConInanicion(t_list COLA, uint32_t POSICION_ACTUAL) //SSTF
{
	/*uint32_t i;
	NodoSector * NODO_AUX = malloc(sizeof(NodoSector));
	NODO_AUX -> DirLogicaSector = DirLogica;
	NODO_AUX ->DirFisicaSector = ConvertirDirLogicaAFisica(DirLogica);
	for(i=0;i<513;i++){
		NODO_AUX -> DATA_SECTOR [i] = Sector[i];
	}*/







}





uint32_t main()
{

}
